package com.cskaoyan.controller;

import com.cskaoyan.bean.BaseRespVo;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpSession;
import java.util.Arrays;

/**
 * RESTful风格的注解
 * @author stone
 * @date 2022/12/24 10:04
 */
@RestController
public class RestfulController {

    //localhost:8080/path/songge
    //@PathVariable → 获得请求URL的一部分值 → 在@RequestMapping的value属性写占位符{}
    // 获得指定占位符位置的值给到所对应的形参 → 形参通过注解接收指定占位符位置的值
    // 通过这个注解，就可以把一部分请求参数写到URL中，比如豆瓣、CSDN
    @RequestMapping("path/{username}")//localhost:8080/path/songge
    public BaseRespVo path(@PathVariable("username")String name) { //new Object[]{"songge"}
        System.out.println("name = " + name);
        return BaseRespVo.ok();
    }
    // localhost:8080/param?username=songge&password=niupi
    //@RequestParam → 开发过程中基本不用，直接使用形参名
    // 形参通过这个注解获得指定请求参数，如果使用了这个注解，就一定要携带对应的请求参数
    @RequestMapping("param")
    public BaseRespVo param(@RequestParam("username")String usernamea,
                            @RequestParam("password")String passwordb) {
        return BaseRespVo.ok();
    }
    //@RequestHeader
    // 比如要获得Accept这个请求和Host这个请求头的值
    // 可以使用字符串或字符串数组来接收 → 如果使用数组来接收，其实就是将字符串通过逗号分隔为数组(split)
    // 形参通过这个注解获得指定请求头的值
    @RequestMapping("header")
    public BaseRespVo header(@RequestHeader("Accept")String[] accept,
                             @RequestHeader("Host")String host) {
        System.out.println(Arrays.asList(accept));
        System.out.println(host);
        return BaseRespVo.ok();
    }
    //@CookieValue
    // 形参通过这个注解获得指定Cookie的值，根据key获得value
    // 比如构造的Cookie是这样的 Cookie:songge=yuanzhi;ligenli=tianming;xuejia=qiezi
    // 相较于前面使用Cookie的话（要通过request获得Cookies数组，然后通过遍历获得key对应的值），要方便的多
    @RequestMapping("cookie")
    public BaseRespVo cookie(@CookieValue("songge")String value) {
        System.out.println(value);
        return BaseRespVo.ok();
    }
    //@SessionAttribute
    // 形参通过这个注解获得指定Session的值，根据key获得value
    // 比如我向session中放入一个key=username的值，我们可以直接取出username对应的值
    @RequestMapping("session")
    public BaseRespVo session(@SessionAttribute("username")String username) {
        return BaseRespVo.ok();
    }
    //localhost:8080/put/xuejia
    @RequestMapping("put/{username}")
    public BaseRespVo sessionPut(@PathVariable("username")String username, HttpSession session) {
        session.setAttribute("username",username);
        return BaseRespVo.ok();
    }
}
